package com.jay.registry;

import com.jay.config.RegistryConfig;
import com.jay.model.ServiceMetaInfo;

import java.util.List;

/**
 * 注册中心接口，用于服务的注册、发现、监听和注销等操作
 */
public interface Registry {

    /**
     * 初始化注册中心
     *
     * @param registryConfig 注册中心的配置信息
     */
    void init(RegistryConfig registryConfig);

    /**
     * 注册服务（服务端）
     *
     * @param serviceMetaInfo 服务的元信息，包括服务的名称、版本、地址等
     * @throws Exception 如果注册过程中出现异常
     */
    void register(ServiceMetaInfo serviceMetaInfo) throws Exception;

    /**
     * 注销服务（服务端）
     *
     * @param serviceMetaInfo 服务的元信息，用于标识要注销的服务
     */
    void unRegister(ServiceMetaInfo serviceMetaInfo);

    /**
     * 服务发现（获取某服务的所有节点，消费端）
     *
     * @param serviceKey 服务的键名，用于查找服务
     * @return 匹配的服務節點列表
     */
    List<ServiceMetaInfo> serviceDiscovery(String serviceKey);

    /**
     * 心跳检测（服务端）
     * 用于服务端报告其健康状态
     */
    void heartBeat();

    /**
     * 监听（消费端）
     *
     * @param serviceNodeKey 服务节点的键名，用于监听服务节点的变化
     */
    void watch(String serviceNodeKey);

    /**
     * 服务销毁
     * 清理资源，解除注册等操作
     */
    void destroy();
}
